package gov.pr.celepar.sentinela.admin.dao.postgre;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import gov.pr.celepar.sentinela.admin.dao.ParametrosConfigDAO;
import gov.pr.celepar.sentinela.admin.dao.factory.DAOFactoryServer;
import gov.pr.celepar.sentinela.admin.pojo.ParametrosConfig;
import gov.pr.celepar.sentinela.util.JDBCLogger;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class PSQLParametrosConfigDAO implements ParametrosConfigDAO {
	private static Log logger = LogFactory.getLog(PSQLParametrosConfigDAO.class);

	protected PSQLParametrosConfigDAO() {

	}

	public ParametrosConfig getParametros() throws Exception {
		ParametrosConfig param = new ParametrosConfig();
		PreparedStatement sql = null;
		DAOFactoryServer dao = DAOFactoryServer.getDAOFactory();
		Connection conn = dao.createConnection();
		try {
			sql = conn.prepareStatement("select  codsistema, "
					+ "senhapadrao, " + "ambiente, " + "maximosenhaserradas, "
					+ "tempoexpiracaosenha, " + "tempobloqueioinatividade, "
					+ "telefonecentralatendimento, "
					+ "indicativosenhaaleatoria," + "mensagemcadastrousuario,"
					+ "mensagemtrocasenha," + "mailserver," + "mailorigem," + "senhamailorigem,"
					+ "mailassunto," + "urlselosentinela,"
					+ "mensagemselosentinela," + "gruporaiz "
					+ "from sentinelaparametros");
			ResultSet rs = sql.executeQuery();
			JDBCLogger.logSQL(sql);
			if (rs.next()) {
				param.setCodSistemaSentinela(rs.getLong("codsistema"));
				param.setSenhaPadrao(rs.getString("senhapadrao"));
				param.setAmbiente(rs.getString("ambiente"));
				param.setMaximoSenhasErradas(rs.getInt("maximosenhaserradas"));
				param.setTempoExpiracaoSenha(rs.getInt("tempoexpiracaosenha"));
				param.setTempoBloqueioInatividade(rs
						.getInt("tempobloqueioinatividade"));
				param.setTelefoneCentralAtendimento(rs
						.getString("telefonecentralatendimento"));
				param.setGerarSenhaAleatoria(rs
						.getBoolean("indicativosenhaaleatoria"));

				param.setMensagemCadastroUsuario(rs
						.getString("mensagemcadastrousuario"));
				param.setMensagemTrocaSenha(rs.getString("mensagemtrocasenha"));
				param.setMailServer(rs.getString("mailserver"));
				param.setMailOrigem(rs.getString("mailorigem"));
				param.setSenhaMailOrigem(rs.getString("senhamailorigem"));
				param.setMailAssunto(rs.getString("mailassunto"));

				param.setUrlSeloSentinela(rs.getString("urlselosentinela"));
				param.setMensagemSeloSentinela(rs
						.getString("mensagemselosentinela"));
				param.setGrupoRaiz(rs.getLong("gruporaiz"));
			}
		} catch (Exception e) {
			logger.error("", e);
			throw e;
		} finally {
			if (sql != null)
				sql.close();
			dao.closeConnection(conn);
		}
		return param;
	}

	public void atualizarParametros(ParametrosConfig param) throws Exception {
		if (param == null)
			return;
		PreparedStatement sql = null;
		DAOFactoryServer dao = DAOFactoryServer.getDAOFactory();
		Connection conn = dao.createConnection();
		try {
			sql = conn.prepareStatement("update sentinelaparametros set  "
					+ "codsistema=?, " + "senhapadrao=?, " + "ambiente=?, "
					+ "maximosenhaserradas=?, " + "tempoexpiracaosenha=?, "
					+ "tempobloqueioinatividade=?, "
					+ "telefonecentralatendimento=?, "
					+ "indicativosenhaaleatoria=?,"
					+ "mensagemcadastrousuario=?," + "mensagemtrocasenha=?,"
					+ "mailserver=?," + "mailorigem=?," + "senhamailorigem=?," + "mailassunto=?,"
					+ "urlselosentinela=?," + "mensagemselosentinela=?,"
					+ "gruporaiz=? ");
			sql.setLong(1, param.getCodSistemaSentinela());
			sql.setString(2, param.getSenhaPadrao());
			sql.setString(3, param.getAmbiente());
			sql.setInt(4, param.getMaximoSenhasErradas());
			sql.setInt(5, param.getTempoExpiracaoSenha());
			sql.setInt(6, param.getTempoBloqueioInatividade());
			sql.setString(7, param.getTelefoneCentralAtendimento());
			sql.setBoolean(8, param.getGerarSenhaAleatoria());
			sql.setString(9, param.getMensagemCadastroUsuario());
			sql.setString(10, param.getMensagemTrocaSenha());
			sql.setString(11, param.getMailServer());
			sql.setString(12, param.getMailOrigem());
			sql.setString(13, param.getSenhaMailOrigem());
			sql.setString(14, param.getMailAssunto());
			sql.setString(15, param.getUrlSeloSentinela());
			sql.setString(16, param.getMensagemSeloSentinela());
			sql.setLong(17, param.getGrupoRaiz());
			sql.executeUpdate();
			JDBCLogger.logSQL(sql);
		} catch (Exception e) {
			logger.error("", e);
			throw e;
		} finally {
			if (sql != null)
				sql.close();
			dao.closeConnection(conn);
		}
	}
}
